//#####################################################################
/*
 * TITULO: Clase Expresion regular
 * AUTORES: Mora Rodriguez Carolina
 * MATERIA: Compiladores
 * GRUPO: 3CM6
 * PROFESOR: Juarez Gambino Joel Omar
 */
//#####################################################################

package ioAdmin;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import automata.Main;
import automata.modelo.Automata;
import automata.modelo.Transicion;

public class ArchivoSalida {

	public ArchivoSalida() {

	}

	/*---------------- FUNCION CREAR ARCHIVO DE TEXTO ------------
	 * ENTRADA:
	 * SALIDA:
	 * FUNCIONAMIENTO:
	 */
	public static void CrearArchivoTexto(Automata af, String nombre) {
		File f = new File(nombre);
		boolean flag = false;

		try {
			FileWriter w = new FileWriter(f);
			BufferedWriter bw = new BufferedWriter(w);
			PrintWriter wr = new PrintWriter(bw);

			for (String estado : af.getEstados()) {
				System.out.println("Empezando estado: " + estado);
				wr.write(estado);
				if (estado.equals(af.getEstadoInicial()))
					wr.write("*");
				else if (af.esFinal(estado))
					wr.write("**");

				for (Character c : af.getSimbolos()) {
					wr.write(':');
					wr.write(c);
					flag = false;
					for (Transicion t : af.getTransiciones()) {
						if (t.getDesde() == Integer.valueOf(estado)) {
								if (t.getSimbolo() == c) {
									wr.write("," + t.getHasta());
									flag = true;
									if(af.getTipo()==Automata.tipoEnum.DETERMINISTA) break;
								}
						}
					}
					if(!flag)
						wr.write(",-");
				}
				wr.write("\n");
			}
			wr.close();
			bw.close();
		} catch (IOException e) {
		}
	}

	/*---------------- FUNCION CREAR ARCHIVO JFLAP ------------
	 * ENTRADA:
	 * SALIDA:
	 * FUNCIONAMIENTO:
	 */
	public static void CrearArchivoJFLAP(Automata a, String nombre) {
		File f;
		f = new File(nombre+".jff");

		Integer id_edo = 0;

		try {
			FileWriter w = new FileWriter(f);
			BufferedWriter bw = new BufferedWriter(w);
			PrintWriter wr = new PrintWriter(bw);

			// Imprimiendo cabecera
			wr.write("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><!--Created with JFLAP 6.4.--><structure>&#13;\n");
			wr.write("\t<type>fa</type>&#13;\n");
			wr.write("\t<automaton>&#13;\n");

			// Imprimiendo estados
			wr.write("\t\t<!--The list of states.-->&#13;\n");
			for (String e: a.getEstados()) {
				wr.write("\t\t<state id=\"" + e + "\" name=\"s"
						+ e + "\">&#13;\n");
				wr.write("\t\t\t<x>4.0</x>&#13;\n");
				wr.write("\t\t\t<y>4.0</y>&#13;\n");
				if (e.equals(a.getEstadoInicial()))
					wr.write("\t\t\t<initial/>&#13;\n");
				else if (a.getEstadosFinales().contains(e))
					wr.write("\t\t\t<final/>&#13;\n");
				wr.write("\t\t</state>&#13;\n");
			}

			// Imprimiendo transiciones
			wr.write("\t\t<!--The list of transitions.-->&#13;\n");
			for (Transicion t : a.getTransiciones()) {
				wr.write("\t\t<transition>&#13;\n");
				wr.write("\t\t\t<from>"+ t.getDesde()+"</from>&#13;\n");
				wr.write("\t\t\t<to>"+ t.getHasta()+"</to>&#13;\n");
				wr.write("\t\t\t<read>"+ t.getSimbolo()+"</read>\n");
				wr.write("\t\t</transition>&#13;\n");
			}

			// Imprimiendo final del archivo
			wr.write("\t</automaton>&#13;\n");
			wr.write("</structure>");

			wr.close();
			bw.close();
		} catch (IOException e) {
		}
		;

	}

	/*---------------- FUNCION CREAR ARCHIVO ------------
	 * ENTRADA:
	 * SALIDA:
	 * FUNCIONAMIENTO:
	 */
	// public static String[][] ActualizarCopiaTrans (String estado, Integer
	// id_edo, ArrayList<Transicion> tabla_trans)
	{
		// String[][] copia_trans = tabla_trans;

		// for(int i=0; i<copia_trans.length; i++)
		// {
		// if(copia_trans[i][0].equals(estado))
		// copia_trans[i][0] = id_edo.toString();
		// if(copia_trans[i][2].equals(estado))
		// copia_trans[i][2] = id_edo.toString();
		// }
		//
		// return copia_trans;
		// }
	}
}
